0589. N 叉树的前序遍历【简单】
1. 📝 题目描述
给定一个 n 叉树的根节点 root,返回 其节点值的 前序遍历。
n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。
示例 1:

txt
输入:root = [1,null,3,2,4,null,5,6]
输出:[1,3,5,6,2,4]1
2
2
示例 2:

txt
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]1
2
2
提示:
- 节点总数在范围
[0, 10^4]内 0 <= Node.val <= 10^4- n 叉树的高度小于或等于
1000
进阶:递归法很简单,你可以使用迭代法完成此题吗?
2. 🎯 s.1 - 递归法
js
/**
* // Definition for a _Node.
* function _Node(val, children) {
* this.val = val;
* this.children = children;
* };
*/
/**
* @param {_Node|null} root
* @return {number[]}
*/
var preorder = function (root) {
const result = []
function traverse(node) {
if (!node) return
// 访问当前节点
result.push(node.val)
// 递归访问每个子节点
if (node.children) {
for (let child of node.children) {
traverse(child)
}
}
}
traverse(root)
return result
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- 时间复杂度:
,其中 是 N 叉树的节点数,需要访问每个节点一次 - 空间复杂度:
,其中 是 N 叉树的高度,主要是递归调用栈的空间消耗,最坏情况下为
3. 🎯 s.2 - 迭代法
js
/**
* // Definition for a _Node.
* function _Node(val, children) {
* this.val = val;
* this.children = children;
* };
*/
/**
* @param {_Node|null} root
* @return {number[]}
*/
var preorder = function (root) {
if (!root) return []
const result = []
const stack = [root]
while (stack.length > 0) {
const node = stack.pop()
result.push(node.val)
// 将子节点从右到左入栈,以保证从左到右的访问顺序
if (node.children) {
for (let i = node.children.length - 1; i >= 0; i--) {
stack.push(node.children[i])
}
}
}
return result
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- 时间复杂度:
,其中 是 N 叉树的节点数,需要访问每个节点一次 - 空间复杂度:
,最坏情况下栈中需要存储所有节点,例如当树退化为链表时